/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.usbcali.proyectofinal.logica;

import co.edu.usbcali.proyectofinal.dao.IConsignacionesDAO;
import co.edu.usbcali.proyectofinal.modelo.Consignaciones;
import co.edu.usbcali.proyectofinal.modelo.ConsignacionesId;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author alejandro
 */
@Scope("singleton")
@Service
public class ConsignacionesLogica implements IConsignacionesLogica {

    @Autowired
    private IConsignacionesDAO consignacionesDAO;

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void crearConsignacion(Consignaciones consignaciones) throws Exception {

        if (consignaciones == null) {
            throw new Exception("La consignacion es nula");
        }

        if (consignaciones.getCuentas() == null) {
            throw new Exception("La cuenta es obligatoria");
        }

        if (consignaciones.getUsuarios() == null) {
            throw new Exception("El usuario es obligatorio");
        }

        if (consignaciones.getId().getConCodigo() <= 0) {
            throw new Exception("El codigo de la consignacion no es valido");
        }

        if (consignaciones.getId().getCueNumero() == null) {
            throw new Exception("El numero de la cuenta es obligatorio");
        }

        if (consignaciones.getConDescripcion() == null) {
            throw new Exception("La descripcion de la consignacion es obligatoria");
        }

        if (consignaciones.getConFecha() == null) {
            throw new Exception("La fecha de la consignacion es obligatoria");
        }

        if (consignaciones.getConValor() == null) {
            throw new Exception("El valor de la consignacion es obligatorio");
        }

        if (consignaciones.getCuentas().getCueNumero() == null) {
            throw new Exception("El numero de la cuenta es obligatorio");
        }

        if (consignaciones.getUsuarios().getUsuCedula() <= 0) {
            throw new Exception("La cedula del usuario no es valida");
        }

        Consignaciones entity = consignacionesDAO.consultarConsignacionesID(consignaciones.getId());

        if (entity != null) {
            throw new Exception("Ya existe una consignacion registrada");
        }

        consignacionesDAO.crearConsignacion(consignaciones);
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void modificarConsignacion(Consignaciones consignaciones) throws Exception {

        if (consignaciones == null) {
            throw new Exception("La consignacion es nula");
        }

        if (consignaciones.getCuentas() == null) {
            throw new Exception("La cuenta es obligatoria");
        }

        if (consignaciones.getUsuarios() == null) {
            throw new Exception("El usuario es obligatorio");
        }

        if (consignaciones.getId().getConCodigo() <= 0) {
            throw new Exception("El codigo de la consignacion no es valido");
        }

        if (consignaciones.getId().getCueNumero() == null) {
            throw new Exception("El numero de la cuenta es obligatorio");
        }

        if (consignaciones.getConDescripcion() == null) {
            throw new Exception("La descripcion de la consignacion es obligatoria");
        }

        if (consignaciones.getConFecha() == null) {
            throw new Exception("La fecha de la consignacion es obligatoria");
        }

        if (consignaciones.getConValor() == null) {
            throw new Exception("El valor de la consignacion es obligatorio");
        }

        if (consignaciones.getCuentas().getCueNumero() == null) {
            throw new Exception("El numero de la cuenta es obligatorio");
        }

        if (consignaciones.getUsuarios().getUsuCedula() <= 0) {
            throw new Exception("La cedula del usuario no es valida");
        }

        Consignaciones entity = consignacionesDAO.consultarConsignacionesID(consignaciones.getId());

        if (entity == null) {
            throw new Exception("No existe la consignacion solicitada");
        }

        entity.setConDescripcion(consignaciones.getConDescripcion());
        entity.setConFecha(consignaciones.getConFecha());
        entity.setConValor(consignaciones.getConValor());
        entity.setCuentas(consignaciones.getCuentas());
        entity.setUsuarios(consignaciones.getUsuarios());

        consignacionesDAO.modificarConsignacion(entity);
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void borrarConsignacion(Consignaciones consignaciones) throws Exception {
        if (consignaciones == null) {
            throw new Exception("La consignacion es nula");
        }

        if (consignaciones.getId().getConCodigo() == 0) {
            throw new Exception("El codigo de la consignacion no es valido");
        }

        if (consignaciones.getId().getCueNumero() == null) {
            throw new Exception("El numero de cuenta no es valido");
        }

        Consignaciones entity = consignacionesDAO.consultarConsignacionesID(consignaciones.getId());

        if (entity == null) {
            throw new Exception("La consignacion solicitada no existe");
        }

        consignacionesDAO.borrarConsignacion(entity);

    }

    @Override
    @Transactional(readOnly = true)
    public Consignaciones consultarConsignacionesID(ConsignacionesId id) throws Exception {
        return consignacionesDAO.consultarConsignacionesID(id);
    }

    @Override
    @Transactional(readOnly = true)
    public List<Consignaciones> consultarTodasLasConsignaciones() throws Exception {
        return consignacionesDAO.consultarTodasLasConsignaciones();
    }

}
